AWS의 서비스를 이용해서 EC2 인스턴스에 접속하기
안녕하세요 클래스메소드의 수재입니다.
최근 다른 계정의 리눅스 베이스인 프라이빗 AMI를 공유 받아서 인스턴스를 작성한 일이 있었습니다.
그런데 해당 AMI의 sshd 설정으로 비밀번호 로그인과 [Allow Users] 옵션이 설정되어 있었습니다.
그래서 직접 접속으로는 로그인하지 못했기 때문에 다른 방법으로 접속할 필요가 있었습니다.
이번에 테스트해본 인스턴스에 직접 접속하지 않고 AWS의 기능을 이용한 접속 방법에 대해서 작성해보고자 합니다.
SSM 으로 연결
AWS Systems Manager(SSM) 로 연결하는 방법에 대하여 알아보겠습니다.
전제 조건
SSM으로 인스턴스를 조작하기 위해서는 다음과 같은 조건이 있습니다.
- 인터넷 게이트웨이 혹은 넷 게이트웨이를 통하여 인터넷으로의 요청이 가능하거나 VPC Endpoint(ssm endpoint)가 활성화되어 있음
- 인스턴스에 SSM Agent가 인스톨되어 있음
- SSM 조작에 필요한 적절한 IAM 역할을 인스턴스에 부여
- 특정 아웃바운드 허용
SSM Agent는 AWS 에서 제공하는 AMI의 경우 이미 인스톨되어 있는 경우가 있습니다.
- SSM Agent 정보
인스톨되어 있지 않다면 인스턴스에 수동으로 설치할 수 밖에 없습니다.
따라서 인스턴스로의 접속을 제한하기 전에 필요하다면 SSM Agent는 미리 인스턴스에 인스톨해 두는 것이 좋습니다.
전제 조건에 대한 내용은 공식 문서에 더 자세히 기재되어 있습니다.
연결 방법
EC2 컨트롤 패널에서 연결을 클릭하여 브라우저 화면에서 프롬프트를 조작할 수 있습니다.
혹은 단순히 몇 개의 쉘 커맨드만을 실행하는 것이라면 SSM Run Command(명령 실행)의 RunShellScript(RunPowerShellScript)를 이용하여 실행할 쉘 스크립트를 등록하는 것도 가능합니다.
이렇게 이용한다면 자동화도 가능한 장점이 있습니다.
특징
SSM으로 인스턴스를 운용한다면 직접 연결에 필요한 모든 패스를 닫을 수 있습니다.
따라서 보안을 좀 더 강화할 수 있습니다.
또한 SSM에서 제공하고 있는 기능들을 활용하여 다수의 인스턴스를 더 효율적으로 관리할 수 있습니다.
예로 들자면 인스턴스의 감시를 위해 Cloudwatch를 운용하는 경우 SSM의 Parameter Store에 구성 파일을 관리한다면 중앙에서 감시 항목을 손 쉽게 컨트롤 할 수 있게 됩니다.
케이스별 SSM의 장점은 공식 문서를 참고해주세요.
직렬 콘솔(serial console)로 연결
SSM Agent가 설치되어 있지 않은 상황에 직접 연결까지 불가능한 상태라면 직렬 콘솔로 연결하는 것을 추천합니다.
전제 조건
공식 문서의 내용을 그대로 빌려오자면 다음과 같습니다.
- 아프리카(케이프타운), 아시아 태평양(홍콩), 아시아 태평양(오사카), 중국(베이징), 중국(닝샤), 유럽(밀라노) 및 중동(바레인)을 제외한 모든 AWS 리전에서 지원됩니다.
- Local Zones, Wavelength Zone 또는AWS Outposts에서 지원되지 않습니다.
- Nitro 시스템에 구축된 모든 가상화된 인스턴스에 대해 지원됩니다.
- 베어 메탈 인스턴스에서는 지원되지 않습니다.
- 다음과 같이 EC2 직렬 콘솔에 대한 액세스를 구성합니다.
- EC2 직렬 콘솔에 대한 계정 액세스 관리.
- EC2 직렬 콘솔 액세스에 대한 IAM 정책 구성. 직렬 콘솔을 사용할 모든 IAM 사용자에게는 필요한 권한이 있어야 합니다.
- OS 사용자 암호 설정.
- 브라우저 기반 클라이언트를 사용하여 직렬 콘솔에 연결하려면 브라우저가 WebSocket을 지원해야 합니다. 브라우저가 WebSocket을 지원하지 않는 경우 자체 키 및 SSH 클라이언트를 사용하여 직렬 콘솔에 연결합니다.
- 인스턴스는 running 상태여야 합니다. 인스턴스가 pending, stopping, stopped, shutting-down 또는 terminated 상태인 경우 직렬 콘솔에 연결할 수 없습니다. 인스턴스 상태에 대한 자세한 내용은 인스턴스 수명 주기 섹션을 참조하세요.
- 인스턴스에서 Amazon EC2 Systems Manager를 사용하는 경우 SSM Agent 버전 3.0.854.0 이상을 인스턴스에 설치해야 합니다. SSM Agent에 대한 자세한 내용은 AWS Systems Manager 사용 설명서에서 SSM Agent 작업을 참조하세요. 인스턴스에 sshd 서버를 설치하거나 실행할 필요는 없습니다.
정리하자면 인스턴스가 Nitro 시스템을 지원하는 인스턴스 타입이어야 하며 베어 메탈 인스턴스에서는 지원되지 않습니다.
연결 방법
EC2 컨트롤 패널의 연결에서 [EC2 직렬 콘솔] 탭을 클릭합니다.
특징
인스턴스의 타입과 사용자의 IAM 조건만 맞다면 간단하게 인스턴스에 연결할 수 있습니다.
인스턴스 당 하나의 직렬 콘솔 연결만을 가질 수 있으므로 동시 유저 접속은 불가능합니다. 또한 연결 중에는 인스턴스의 처리량이 조금 감소할 수 도 있습니다.
EC2Rescue for Linux 이용
EC2Rescue for Linux는 운영 체제 수준의 문제를 해결하기 위해 사용할 수 있습니다.
사전 조건
EC2Rescue를 지원하는 OS 및 일정 버전 이상의 Python이 필요합니다.
연결 방법
단순히 블록 스토리지를 교환하는 방식으로 대응할 수 있었습니다.
자세한 내용은 공식 문서를 참고하는 것을 추천합니다.
특징
EC2Rescue는 제가 겪었던 ssh 로그인 뿐만 아니라 운영 체제 레벨의 문제에 대해서도 대응할 수 있습니다.
따라서 EC2를 운용한다면 어떤 서비스인지 한 번 훑어보는 것을 추천합니다.
마무리
AWS에서는 EC2를 조작하고 관리할 수 있는 서비스가 생각보다 사용하기 쉽게 잘 마련되어 있다는 것을 알게되었습니다.
특히 EC2Rescue의 경우에는 키 페어를 분실했을 때도 유용하게 쓰입니다.
긴 글 읽어주셔서 감사합니다.
오탈자 및 내용 피드백은 언제나 환영합니다. must01940 지메일로 연락 주시면 감사합니다!
본 블로그 게시글을 보시고 문의 사항이 있으신 분들은
클래스메소드코리아 (info@classmethod.kr)로 연락 주시면 빠른 시일 내 담당자가 회신 드릴 수 있도록 하겠습니다 !